<?php
    class IndexController extends Main_Controller_Action
    {
        private $_arrParam;
        
        public function init() {
            $this->loadTemplates();
            $this->_arrParam = $this->_request->getParams();
        }
        
        public function indexAction() {
            $this->view->headTitle('Trang chủ');
            
            $news = new Admin_Model_News();
            $list = $news->listNews();
            $paginator = Zend_Paginator::factory($list);
            $paginator->setItemCountPerPage(4);
            $paginator->setPageRange(1);
            $currentPage = $this->_request->getParam('page', 1);
            $paginator->setCurrentPageNumber($currentPage);            
            $this->view->data = $paginator;
            $this->view->total = count($list);
            
            $tour = new Default_Model_Tour();
            $this->view->tour = $tour->listTourDefault();
        }
        
        public function loginAction() {
            $this->_helper->layout()->disableLayout();
        }
        
        public function registerAction() {
            $this->view->headTitle('Đăng ký');
            $this->view->errorFullname = '<i><font color="#999999" > Tên đầy đủ gồm các kí tự chữ cái, không chứa chữ số và độ dài từ 5-50 kí tự.</font></i>';
            $this->view->errorEmail = '<i><font color="#999999" > Địa chỉ email phải đúng định dạng, dùng để đăng nhập và tìm lại mật khẩu khi quên. </font></i>';
            $this->view->errorPassword = '<i><font color="#999999" > Mật khẩu có độ dài từ 6-32 kí tự. </font></i>';
            $this->view->errorRePassword = '<i><font color="#999999" > Mật khẩu có độ dài từ 6-32 kí tự. </font></i>';
            $captcha = new Zend_Captcha_Image();
            $captcha->setTimeout('300')               
                   ->setWordLen('4')
                   ->setHeight('60')
                   ->setWidth('210')                           
                   ->setImgDir(APPLICATION_PATH . '/../public/img/captcha/')
                   ->setImgUrl('/tournow/public/img/captcha/')
                   ->setFont('public/fonts/tunga.ttf')
                   ->setFontSize('40');                   
            $captcha->generate(); 
            $this->view->captcha = $captcha->render($this->view);  
            $this->view->captchaID = $captcha->getId();
            $captchaSession = new Zend_Session_Namespace('Zend_Form_Captcha_' . $captcha->getId());
            $captchaSession->word = $captcha->getWord();
            
            if($this->_request->isPost()) {
                $captchaID = $this->_request->captcha_id;
                $captchaSession = new Zend_Session_Namespace('Zend_Form_Captcha_' . $captchaID);
                $captchaIterator = $captchaSession->getIterator();
                $captchaWord = $captchaIterator['word'];
                
                $user = new Default_Model_User();
                $filter = new Zend_Filter_StringTrim();
                $toLower = new Zend_Filter_StringToLower();
                $email = $filter->filter($this->_arrParam['email']);
                $email = $toLower->filter($email);
                $fullname = $filter->filter($this->_arrParam['fullname']);
                $password = $this->_arrParam['password'];
                $rePassword = $this->_arrParam['rePassword'];
                $gender = $this->_arrParam['gender'];
                $flag = true;
                
                $validate = new Default_Form_ValidateUser();
                if($this->_request->captcha != $captchaWord) {
                    $this->view->errorCaptcha = '<i><font color="red" > Mã xác nhận không chính xác. </font></i>';
                    $flag = false;
                }
                if($validate->validateEmail($email)) {
                    $this->view->emailValue = $email;
                }
                else {
                    $this->view->errorEmail = '<i><font color="red" > Địa chỉ email phải đúng định dạng, dùng để đăng nhập và tìm lại mật khẩu khi quên. </font></i>';
                    $flag = false;
                }
                if($user->checkUser($email) > 0) {
                    $this->view->errorEmail = '<i><font color="red" > Địa chỉ email này đã tồn tại. </font></i>';
                    $flag = false;
                }
                if($validate->validateFullname($fullname)) {
                    $this->view->fullnameValue = $fullname;
                }
                else {
                    $this->view->errorFullname = '<i><font color="red" > Tên đầy đủ gồm các kí tự chữ cái, không chứa chữ số và độ dài từ 5-50 kí tự.</font></i>';
                    $flag = false;
                }
                if(!$validate->validatePassword($password)) {
                    $this->view->errorPassword = '<i><font color="red" > Mật khẩu có độ dài từ 6-32 kí tự. </font></i>';
                    $flag = false;
                }
                if(!$validate->validatePassword($rePassword)) {
                    $this->view->errorRePassword = '<i><font color="red" > Mật khẩu có độ dài từ 6-32 kí tự. </font></i>';
                    $flag = false;
                }
                elseif($password != $rePassword) {
                    $this->view->errorRePassword = '<i><font color="red" > Mật khẩu không trùng khớp. </font></i>';
                    $flag = false;
                }
                
                if($flag == true) {
                    $flex = new Zendvn_Filter_RemoveCircumflex();
                    $mask = APPLICATION_PATH."/../public/img/captcha/*.png"; 
                    array_map("unlink",glob($mask));
                    $code = time() . mt_rand(5, 99999999);
                    $data = array(
                        'email' => $email,
                        'password' => md5($password),
                        'fullname' => $fullname,
                        'gender' => $gender,
                        'avatar' => 0,
                        'role_id' => 3,
                        'code' => $code,
                        'status' => 1,
                    );
                    $user_id = $user->addUser($data);
                    $_arrParam = array(
                        'user_id' => $user_id,
                        'email' => $email,
                        'fullname' => $fullname,
                        'fullname_filter' => $flex->filter($fullname),
                        'avatar' => 0,
                        'role_id' => 3,
                        'status' => 1,
                    );
                    $user->saveAddItem($_arrParam, array('task' => 'add'));
                    
                    $db = Zend_Registry::get('db');
                    $auth = Zend_Auth::getInstance();
                    $authAdapter = new Zend_Auth_Adapter_DbTable($db);
                    $authAdapter->setTableName('user')
                            ->setIdentityColumn('email')
                            ->setCredentialColumn('password');
                                                    
                    $authAdapter->setIdentity($email)
                            ->setCredential(md5($password));
                                                    
                    $select = $authAdapter->getDbSelect();
                    $select->where('status = 1');
                    $result = $auth->authenticate($authAdapter);
                    if($result->isValid()) {
                        $data = $authAdapter->getResultRowObject(null, array('password'));
                        $auth->getStorage()->write($data);
                        $this->_redirect('index/success');
                    }
                    else {
                        $this->_redirect('index');
                    }
                }
            }
        }
        
        public function successAction() {
            $this->view->headTitle('Đăng ký thành công');
            $auth = Zend_Auth::getInstance();
            $infoUser = $auth->getIdentity();
            $this->view->fullname = $infoUser->fullname;
        }
        
        public function forgotpasswordAction() {
            $this->view->headTitle('Quên mật khẩu');
        }
        
        public function logoutAction() {
            $auth = Zend_Auth::getInstance();
            $auth->clearIdentity();
            $request = new Zend_Controller_Request_Http();
            $emailCookie = $request->getCookie('emailUser');
            $passwordCookie = $request->getCookie('passwordUser');
            setcookie('emailUser', null, -1);
            setcookie('passwordUser', null, -1);
            $this->_redirect('index');
        }
        
        public function checkuserAction() {
            $this->_helper->layout()->disableLayout();
            $user = new Default_Model_User();
            $filter = new Zend_Filter_StringTrim();
            $toLower = new Zend_Filter_StringToLower();
            $email = $filter->filter($this->_arrParam['email']);
            $email = $toLower->filter($email);
            if($user->checkUser($email)) {
                $this->view->error = '<i><font color="red">Địa chỉ email này đã tồn tại. </font></i>';
            }
            else {
                $this->view->error = '';
            }
        }
    }
